#ifndef __qyconfigurator__
#define __qyconfigurator__

#include <QObject>
#include <QMap>
#include <QVariant>

class QMainWindow;
class QyLexerConfigurator;
class QyScript;
class QySciEditConfigurator;
class QScriptValue;

/*! \class QyConfigurator
	\brief Конфигуратор программы.

	QyConfigurator читает конйигурационные файлы, конфигурирует интерпритатор и выполняет инициализирующий скрипт.

*/

class QyConfigurator : public QObject {
	Q_OBJECT
public:
	QyConfigurator( QMainWindow * mainWindow, const QString & path=QString() ); //!< Конструктор

	QyScript * script() { return p_script; }  //!< внутренний интерпритатор
	QString path() const { return p_path; }

public slots:
	void restoreSettings(); //!< восстановить конфигурацию
	void saveSettings(); //!< сохранить конфигурацию
	void runInitScript(); //!< запустить инициализирующий скрипт
	void configureScript( QyScript * script ); //!< сконфигурировать интерпритатор

signals:
	void restoreSession( const QString & fileName ); //!< эмитируется, когда необходимо восстановить сессию
	void saveSession( const QString & fileName ); //!< эмитируется, когда необходимо сохранить сессию
	void loadPlugins( const QString & dirPath );  //!< эмитируется когда необходимо загрузить плагины
	void initScriptComplete();  //!< эмитируется, когда инициализирующий скрипт выполнен

private:
	QString p_path, p_initScriptFileName, p_lastSessionFileName;
	QMainWindow * p_mainWindow;
	QyScript * p_script;
	QyLexerConfigurator * lexerConfigurator;
	QySciEditConfigurator * sciEditConfigurator;

};

#endif/*__qyconfigurator__*/
